竹内郁雄先生のたらい回し関数というと、こういうのです。
[crayon lang=”scheme” title=”takm.scm”]
(defun tak (x y z) ; 日本語コメントのテスト
(if (<= x y) ; 引数を3つ取り、自分自身を再帰的に
z ; 呼び出すのがtakと呼ばれる
(tak (tak (1- x) y z) ; この関数です。
(tak (1- y) z x) ; 何度も何度も再帰的に
(tak (1- z) x y)))) ; たらい回ししますが必ず終了します
[/crayon]
ところが、これはマッカーシーが間違えて覚えて広めてしまったものだそうで、竹内郁雄先生のオリジナルは
[crayon lang="scheme" title="tak.scm"]
(defun tak (x y z) ; 日本語コメントのテスト
(if (<= x y) ; 引数を3つ取り、自分自身を再帰的に
y ; 呼び出すのがtakと呼ばれる
(tak (tak (1- x) y z) ; この関数です。
(tak (1- y) z x) ; 何度も何度も再帰的に
(tak (1- z) x y)))) ; たらい回ししますが必ず終了します
[/crayon]
こちらだそうです。
最初のifが真のときに返す値が違います。
0 Comments.